/*
 * Copyright (c) 2020 - present, Inspur Genersoft Co., Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.inspur.edp.web.formmetadata.i18n.component.strategy.i18nresourcestrategy;

import com.inspur.edp.lcm.metadata.api.entity.I18nResourceItem;
import com.inspur.edp.lcm.metadata.api.entity.I18nResourceItemCollection;
import com.inspur.edp.web.formmetadata.i18n.I18nResourceItemManager;
import com.inspur.edp.web.formmetadata.i18n.component.ComponentUtility;
import com.inspur.edp.web.formmetadata.i18n.component.strategy.namestrategy.ComponentNameFactory;
import com.inspur.edp.web.formmetadata.i18n.component.strategy.namestrategy.ComponentNameType;
import com.inspur.edp.web.formmetadata.i18n.component.strategy.namestrategy.IComponentNameStrategy;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * 具体工具栏标题提取
 * @author guozhiqi
 */
public class ToolBarItemI18nResourceStrategy extends AbstractI18nResourceStrategy {
    @Override
    protected String getComponentName(HashMap<String, Object> component)  {
        IComponentNameStrategy componentNameStrategy = ComponentNameFactory.getInstance().creatComponentNameStrategy(ComponentNameType.TEXT);
        if (componentNameStrategy == null) {
            return null;
        }

        return componentNameStrategy.getComponentName(component);
    }

    @Override
    protected I18nResourceItemCollection extractAttributeI18nResourceItemCollection(String i18nResourceItemBaseId, HashMap<String, Object> currentComponent) {
        I18nResourceItemCollection i18nResourceItemCollection = new I18nResourceItemCollection();

        if(currentComponent.containsKey("buttons")){
            ArrayList< HashMap<String, Object>> buttons = (ArrayList<HashMap<String, Object>>) currentComponent.get("buttons");
            for (HashMap<String, Object> button : buttons) {
                String buttonId = (String) button.get("id");
                String buttonName = (String)button.get("text");
                I18nResourceItem footerButtonI18nResourceItem = I18nResourceItemManager.createI18nResourceItem(i18nResourceItemBaseId, buttonId, buttonName, buttonName);
                this.addInCollection(i18nResourceItemCollection, footerButtonI18nResourceItem);
                if(button.containsKey("tipsText")){
                    String tipsText = (String) button.get("tipsText");
                    I18nResourceItem tipsTextI18nResourceItem = I18nResourceItemManager.createI18nResourceItem(i18nResourceItemBaseId,  buttonId+"/tipsText", tipsText, tipsText);
                    this.addInCollection(i18nResourceItemCollection, tipsTextI18nResourceItem);
                }
                //子按钮
                if (button.containsKey("children")) {
                    ArrayList<HashMap<String, String>> childrenButtons = (ArrayList<HashMap<String, String>>) button.get("children");
                    for (HashMap<String, String> childrenButton : childrenButtons) {
                        I18nResourceItem childButtonI18nResourceItem = I18nResourceItemManager.createI18nResourceItem(i18nResourceItemBaseId,  childrenButton.get("id"), childrenButton.get("text"), childrenButton.get("text"));
                        this.addInCollection(i18nResourceItemCollection, childButtonI18nResourceItem);

                        if(childrenButton.containsKey("tipsText")){
                            String tipsText = (String) childrenButton.get("tipsText");
                            I18nResourceItem tipsTextI18nResourceItem = I18nResourceItemManager.createI18nResourceItem(i18nResourceItemBaseId,  childrenButton.get("id")+"/tipsText", tipsText, tipsText);
                            this.addInCollection(i18nResourceItemCollection, tipsTextI18nResourceItem);
                        }
                    }

                }
            }
        }
        return i18nResourceItemCollection;
    }
}
